#include <iostream>
#include <vector>


class Solution {
    public:
    int removeElement1(std::vector<int> &nums, int val){
        int k = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            // 比较，如果当前遍历到的元素和目标值不相等，就是要保留的元素，相等就是不做处理
            if (nums[i] != val)
            {
                nums[k++] = nums[i];
            }
        }
        return k;
    }
    int removeElement2(std::vector<int> &nums, int val){
        int k = 0;
        // 移动元素，如果nums[i]==val,表示需要删除，就移动元素，!= 就保留，不做处理
        for (int i = 0; i < nums.size(); i++)
        {
            if (nums[i] == val)
            {
                // 往后移动元素
                k++;
            }else{
                nums[i - k] = nums[i];
            }
            
        }
        return nums.size() - k;
        
    }

};

int main(){

    Solution s;
    std::vector<int> v;
    v.push_back(1);
    v.push_back(5);
    v.push_back(8);
    v.push_back(4);
    v.push_back(4);
    int res = s.removeElement1(v, 8);
    std::cout << "the result is:" << res << std::endl;
    return 0;
}